package com.tsy.server.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tsy.server.system.entity.User;
import com.tsy.server.system.entity.dto.*;
import com.tsy.server.system.entity.vo.*;

import java.util.List;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户注册
     *
     * @param registerDTO 注册信息
     * @return 是否成功
     */
    boolean register(UserRegisterDTO registerDTO);

    /**
     * 用户登录
     *
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    UserLoginVO login(UserLoginDTO loginDTO);

    /**
     * 根据用户名获取用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    User getUserByUsername(String username);

    /**
     * 根据邮箱获取用户信息
     *
     * @param email 邮箱
     * @return 用户信息
     */
    User getUserByEmail(String email);

    /**
     * 分页查询用户列表
     * @return 分页结果
     */
    Page<User> listUsers(UserVO userVO);

    /**
     * 获取当前登录用户信息
     *
     * @return 用户信息
     */
    UserInfoVO getCurrentUserInfo();

    /**
     * 退出登录
     *
     * @param token 令牌
     * @return 是否成功
     */
    boolean logout(String token);

    /**
     * 发送邮箱验证码
     *
     * @param email 邮箱
     * @return 是否成功
     */
    boolean sendVerificationCode(String email);
    
    /**
     * 验证邮箱验证码
     *
     * @param verifyCodeDTO 验证码信息
     * @return 是否验证成功
     */
    String verifyEmailCode(VerifyCodeDTO verifyCodeDTO);
    
    /**
     * 重置密码
     *
     * @param resetPasswordDTO 重置密码信息
     */
    void resetPassword(ResetPasswordDTO resetPasswordDTO);
    
    /**
     * 切换组织
     *
     * @param currentOrgId 组织ID
     * @return 角色权限信息
     */
    RolePermissionVO switchOrg(Long currentOrgId);

    /**
     * 获取组织用户列表
     *
     * @param userVO 查询条件
     * @return 分页结果
     */
    Page<UserListVO> getOrgUserList(UserVO userVO);

    /**
     * 从组织中删除用户
     *
     * @param userId 用户ID
     */
    void delOrgUser(Long userId);
    
    /**
     * 更新组织用户信息
     *
     * @param dto 组织用户信息
     */
    void updateOrgUser(UserOrganizationDTO dto);
    
    /**
     * 批量添加组织用户
     *
     * @param list 组织用户列表
     */
    void batchAddOrgUser(List<UserOrganizationDTO> list);
    
    /**
     * 修改密码
     *
     * @param updatePasswordDTO 修改密码信息
     * @return 是否成功
     */
    void updatePassword(UpdatePasswordDTO updatePasswordDTO);
}